 function delegate(that,thatMethod){
    if(arguments.length > 2){
      var _params=[];
      for(var n=2; n<arguments.length; ++n){ _params.push(arguments[n]); }
      return function(){ return thatMethod.apply(that,_params); }
    }else{ return function(){ return thatMethod.call(that); }}
  }

  function delegate_cp(that,thatMethod){
      return function(){ return thatMethod.apply(that,arguments); }
  }

var obj={
    name:"someName",
    method:function (p ){ alert( this.name + ":" + p ); }
  }

  function testIt(){
    window.setTimeout(delegate(obj,obj.method,"parameter!"),1000);
  }